Module# 05: Linked List                                                                Lecture#20: Linked
List with JCF 
// Example 20.1:
Create a linked list
// This program
define a linked list and add some items into it.
import java.util.*;
public class CreateLLandAddItems { 
         public static void main(String args[]) { 
                  // Creating an empty ll of class LinkedList
            LinkedList<String>ll = new LinkedList<String>(); 
           // Adding elements to the linked list using a
number of add methods
                ll.add("Mumbai"); 
                ll.add("Chennai"); 
                ll.add("Kolkata"); 
                ll.add("Delhi"); 
                ll.add("Bangalore"); 
                ll.add("Guwahati"); 
                ll.add("Hyderabad");
               // System.out.println("Linked list :
"+ ll); // Simple printing
      
  // Printing the list using an iterator
              Iterator<String>itr=ll.iterator();  
            while(itr.hasNext()){  
                     System.out.println(itr.next());  
             }
       }
}     
// Example 20.2:
Create a linked list with user defined objects
/* This program shows
how to create an array of objects of type Students and then add the array into
a linked list and then printing the same. */
import java.util.*; 
//Declaration of a
user defined class
class Student {
     String name;
     double marks;
     // Constructor
     Student(String s, double m) {
         name = s;
         marks = m;
     }
     void printData () {// To parant a reacord
         System.out.print("Name : " + name);
         System.out.println("   Marks : " + marks);
     }
}
// The main class is
defined below.
public class CreateLLofCollection
{ 
        public static void main(String args[]) { 
 
      // Create an aaray of
objects
      Student
sArray[] = new Student[5]; // To store 5 objects
  
// Create the array
sArray
      sArray[0] = new Student("Ram", 79.6);
      sArray[1] = new Student("Rahim", 85.5);
      sArray[2] = new Student("John", 90.1);
      sArray[3] = new Student("Lisa", 69.4);
      sArray[4] = new Student("Ana", 59.8);
  
      // Creating a
linked-list with sArray collection
      LinkedList<Student> ll = new LinkedList<Student>(Arrays.asList(sArray));
      Student
temp;
      // Printing the list
using an iterator
      Iterator<Student>itr=ll.iterator();  
      while(itr.hasNext()){  
                    temp = itr.next();
                    temp.printData();   // Print the current
record.
             }
      }
}
// Example 20.3:
Insertion at different locations 
/*This program shows
how items can be inserted at different locations in a linked list. For this
purpose, there are methods like add(), addFirst(), addLast() are defined in the
LinkedList class. */
import java.util.*; 
  
public class LLinsertionDemo { 
    public static void main(String args[]) { 
      // Creating an empty
ll of class LinkedList
      LinkedList<String>ll = new LinkedList<String>(); 
      // Adding elements to
the linked list using a number of add methods
      ll.add("Mumbai");       // Add an initial
item
      ll.add("Chennai");      // Add another item
      ll.addLast("Kolkata");        // Add at the end
      ll.addFirst("Delhi");         // Add at the front
      ll.add(2, "Bangalore");   // Add in the specific location
      ll.add("Guwahati");     // Sequential add
goes at the end
      ll.add("Hyderabad");    // Another sequential
insertion
      // Printing the list
using an iterator
      Iterator<String>itr=ll.iterator();  
      while(itr.hasNext()){  
                  System.out.println(itr.next());  
      }
      // Alternatively:
      System.out.println("Linked list :
"+ ll); // Simple printing
      }
}
// Example 20.4:
Insertion of a list into a LinkedList
/* A sub list can be
inserted into a linked list in addition to a single item. This program shows
how a sub list can be inserted at different locations in a linked list. For
this purpose, the addAll() method is used.*/
import java.util.*; 
 
public class InsertSubListToLL{
     public static void main(String args[]){  
      LinkedList<String> ll1 = new LinkedList<String>();  
      System.out.println("Initial list of
elements: "+ ll1);  
      ll1.add("MP
Allahabad");  
      ll1.add("MP
Lucknow");  
      ll1.add("MP
Varanasi");  
      System.out.println("Initial list: ”
+ ll1);  
    
             // Create another linked list, say ll2
      LinkedList<String> ll2 = new LinkedList<String>();  
      ll2.add("MLA Nadia");  
      ll2.add("MLA
Kharagpur"); 
      
      //Adding the second
list (ll2) to the first list (ll1)
      ll1.addAll(ll2);  
      System.out.println("After adding
ll2 to ll1: ” + ll1);  
  
      // Create another linked list, say ll3
      LinkedList<String> ll3 = new LinkedList<String>();  
      ll3.add("MLA
Durgapur");  
      ll3.add("MLA
Howrah");  
  
      //Inserrt ll3 at a specific position of ll1
      ll1.addAll(3, ll3);   // Insert ll3 at location 3 of ll1
      System.out.println("After insetting
ll3: ” + ll1);  
      //Do some normal
insertions
      ll1.addFirst("President");  
      ll1.addLast("Prime
Minister"); 
      ll1.add("MP
Chennai");
      System.out.println("The final list ”
+ ll1);     
      }  
}
// Example 20.5:
Deletion of an object from a LinkedList
/* Like insertion,
deletion operation on a linked list can be carried our many ways. Following few
examples illustrates the deletion operation with methods remove(),
removeFirst(), removeLast(), etc.*/
import java.util.*;
 
public class DeletionFromLL {  
    public static void main(String [] args)  { 
            // Creating a linked
list
            LinkedList<String>ll1 = new LinkedList<String>();  
            ll1.add("A");  
            ll1.add("E");  
            ll1.add("I");  
            ll1.add("O");  
            ll1.add("U");  
            ll1.add("H");
            System.out.println("List of vowels:
"+ll1);
  
      //Removing specific element from the linked
list
      ll1.remove("H");   // Rmovee the vowel H
      System.out.println("After deletion
of H : "+ll1);   
  
      //Removing element on the basis of specific
position  
      ll1.remove(0);   // This will remove A from the list
      System.out.println("After invoking
remove(index) method: "+ll1);   
  
      // Let’s create another list of semi-vowels
       LinkedList<String> ll2=new LinkedList<String>();  
      ll2.add("M");  
      ll2.add("N");  
      // Adding new
elements to the list of vowels
      ll1.addAll(ll2);  // Append ll2 after ll1
      System.out.println("Updated list :
"+ll1);
   
      //Removing first
element from the list  
      ll1.removeFirst();  
      System.out.println("After invoking
removeFirst() method: "+ll1);
      //Removing last element from the list  
      ll1.removeLast();  
      System.out.println("After invoking
removeLast() method: "+ll1);  
      // Removing all
elements from ll2
      ll1.removeAll(ll2);  
      System.out.println("After removing
semi-vowels: "+ll1);  
 
      ll1.add("A");
      ll1.add("B");
      ll1.add("A");
      //Removing first
occurrence of element from the list  
      ll1.removeFirstOccurrence("A");  
      System.out.println("After removing
first occurrence of A: "+ll1);  
      //Removing the last
occurrence of B
      ll1.removeLastOccurrence("B");  
      System.out.println("After invoking
removeLastOccurrence() method: "+ll1);
      //Removing all the
elements present in the list   
      ll1.clear();  
      System.out.println("After invoking
clear() method: "+ll1);   
      }  
}  
  
 // Example 20.6: Traversal operation on a
linked List collection
/* The following
program illustrates how to traverse two different type of lists in reverse order,
that is, from the end to the front. */
import java.util.*;  
public class TravserseReverseLL{  
    public static void main(String args[]){
      // Case 1: a linked
list of countries  
      LinkedList<String> lCountries = new LinkedList<String>();  
      lCountries.add("Australia");  
      lCountries.add("India"); 
      lCountries.add("South
Africa"); 
      lCountries.add("Zimbabwe");
      //Traversing the list of countries in reverse
order  
      Iterator
itr1 =lCountries.descendingIterator();  
      while(itr1.hasNext())   {  
          System.out.println(itr1.next());  
      }
      
      // Case 2: a linked list of numbers  
      LinkedList<Integer> lNumbers = new LinkedList<Integer>();  
      lNumbers.add(123);  
      lNumbers.add(345); 
      lNumbers.add(567);  
      lNumbers.add(789);
 
      //Traversing the list
of numbers in reverse order  
      Iterator
itr2 = lNumbers.descendingIterator();  
      while(itr2.hasNext())   {  
           System.out.println(itr2.next());  
      }   
       } 
 }   
// Example 20.7:
Miscellaneous operations
/* The
LinkedList  class is loaded with several
other methods like get(), contain(), size(), set(), etc. The following program
illustrates those methods and their utilities in Java programming. */
import java.util.*;  
public class OtherMethodsOfLL{  
     public static void main(String args[]){// Creating a linked list
      LinkedList<String>lLetters = new LinkedList<String>();  
      lLetters.add("J");  
      lLetters.add("O");  
      lLetters.add("Y");  
      lLetters.add("W");  
      lLetters.add("I");  
      lLetters.add("T");
      lLetters.add("H");
      lLetters.add("J");  
      lLetters.add("A");  
      lLetters.add("V");
      lLetters.add("A");
      lLetters.add("2020");
      System.out.println("List : "+lLetters);  
      // Finding an
elements in the linked list 
      boolean status = lLetters.contains("Z"); 
      if(status) 
           System.out.println("List contains the element 'Z' "); 
      else
           System.out.println("List doesn't contain 'Z'"); 
  
      // Finding the number of elements in the
linked list 
      int size = lLetters.size(); 
      System.out.println("Number of
letters  = "+ size); 
      // Get and set
elements from the linked list 
      String
element = lLetters.get(11); 
      System.out.println("Element
returned by get() : ” + element); 
      lLetters.set(11, "The fun"); 
      System.out.println("Linked list
after change : ” + lLetters); 
     } 
}
// Example 20.8: Case
study with a user defined objects
/* The following, a
program shows a list a number of books, insertion of another books in the list,
deletion of books and then traversing of the books, etc.*/
import java.util.*;  
// Defining a calls
Book
class Book {  
     int accnNo;  
     String title, author, publisher;  
     double cost;  
     // Constructor of the class  
     Book(int id, String t, String auth, String pub, double val) {  
      accnNo = id;  
      title = t;  
      author = auth;  
      publisher = pub;  
      cost = val;  
     }  
}
    
// The main class
maintaining a library of books
public class LibraryLL {  
     public static void main(String[] args) {  
      List<Book> library =new LinkedList<Book>(); //Creating list of
Books  
      //Creating a list of
Books  
      Book
b1 = new Book(101,"Oracle Java","Leslie Lamport","Oxford",88.5);  
      Book
b2 = new Book(102,"Complete Java","McGraw Hill", "TMH" , 94);  
      Book
b3 = new Book(103,"Joy with Java","Samanta","Prentice
Hall",69.6); 
 
      library.add(b1);  //Adding books to list  
      library.add(b2);  
      library.add(b3);
  
      //Traversing the list 
      for(Book b:library){System.out.println("Book ID: " +b.accnNo);
          System.out.print(b.title+" "+b.author+" "+b.publisher+" "+b.cost);
          System.out.println();  
            }  
       }  
}